Web Application 會接收使用者的 Request,並透過 Response 來回應使用者。這些請求與回應通常是以 JSON 格式傳遞。以更新商品資訊為例,Request JSON 會包含新的商品名稱與價格,而 Response JSON 則會提供更新後的商品資訊。
Web Application 有責任驗證 Request JSON 和 Response JSON 資料的正確性。如果缺乏驗證步驟,資料可能會被錯誤地更新,或是回傳不完整的資訊給使用者。資料驗證的內容通常包括確認資料是否缺漏,以及數值是否合理。例如,Web Application 需檢查 Request JSON 是否包含商品名稱與價格,並確認價格是正數。對於 Response JSON 也是如此,需檢查其是否正確包含商品名稱與價格。
在之前介紹的 Django 和 Flask 套件中,它們各自擁有主流的資料驗證方式。本篇文章將介紹另一個功能強大的資料驗證套件:Pydantic。值得一提的是,下一篇介紹的 FastAPI 套件,這個後起之秀正是依賴 Pydantic 來驗證 Request JSON 和 Response JSON。接下來,我將透過範例進行詳細說明。
本次範例使用的是 Pydantic 2.8.2 版本
poetry add pydantic==2.8.2
本文同樣以商品為範例。首先,開發者需要定義 Product
類別及其屬性。由於屬性型別的宣告文法採用 Python 3.5 推出的型別註釋,因此開發者可以輕鬆上手。第一個屬性 name
代表商品名稱,其型別為字串;第二個屬性 price
代表商品價格,其型別為正數。當資料通過驗證後,就會成功建立物件。
from pydantic import BaseModel, PositiveInt
class Product(BaseModel):
name: str
price: PositiveInt
product = Product(name='demo_product', price=100)
print(f"name: {product.name}")
print(f"price: {product.price}")
反之,當資料驗證失敗時,Pydantic 會拋出例外,並提供詳細的錯誤訊息,以幫助開發者進行後續的錯誤處理。
product = Product(name='demo_product', price=-2)
最後,開發者可以將通過資料驗證的物件轉換成 JSON,以便回傳給使用者作為 Response。
product = Product(name='demo_product', price=100)
print(f"JSON: {product.model_dump_json()}")